JSON Views একটি শক্তিশালী ফিচার যা Jackson-এ ব্যবহৃত হয় JSON সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন প্রক্রিয়ার সময় ডেটার বিভিন্ন অংশকে কাস্টমাইজ করার জন্য। এটি একাধিক ভিউ তৈরি করতে দেয়, যাতে এক ভিউতে এক সেট ফিল্ড এবং অন্য ভিউতে ভিন্ন সেট ফিল্ড অন্তর্ভুক্ত করা যায়।
JSON Views কীভাবে কাজ করে?
Jackson JSON Views ব্যবহার করতে নিচের ধাপগুলো অনুসরণ করা হয়:
- View Class তৈরি করা: View গুলো নির্ধারণ করার জন্য এক বা একাধিক Marker Interface তৈরি করা হয়।
- Annotations ব্যবহার করা:
@JsonViewAnnotation দিয়ে ফিল্ড বা মেথডগুলোতে ভিউ নির্ধারণ করা হয়। - ObjectMapper-এর সাথে View ব্যবহার করা: নির্দিষ্ট View অনুযায়ী ডেটা সিরিয়ালাইজ বা ডেসিরিয়ালাইজ করা হয়।
প্রথম ধাপ: View Class তৈরি করা
নিচের মত একটি Marker Interface তৈরি করা হয়:
public class Views {
public static class Public {}
public static class Internal extends Public {}
}
দ্বিতীয় ধাপ: Model Class-এ @JsonView যোগ করা
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonView;
public class User {
@JsonView(Views.Public.class)
private int id;
@JsonView(Views.Public.class)
private String name;
@JsonView(Views.Internal.class)
private String email;
@JsonView(Views.Internal.class)
private String password;
// Getters and Setters
}
তৃতীয় ধাপ: সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন
উদাহরণ:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
public class JsonViewExample {
public static void main(String[] args) throws Exception {
// একটি User Object তৈরি
User user = new User();
user.setId(1);
user.setName("John Doe");
user.setEmail("john.doe@example.com");
user.setPassword("secret123");
ObjectMapper objectMapper = new ObjectMapper();
// Public View সিরিয়ালাইজেশন
ObjectWriter publicWriter = objectMapper.writerWithView(Views.Public.class);
String publicJson = publicWriter.writeValueAsString(user);
System.out.println("Public View:");
System.out.println(publicJson);
// Internal View সিরিয়ালাইজেশন
ObjectWriter internalWriter = objectMapper.writerWithView(Views.Internal.class);
String internalJson = internalWriter.writeValueAsString(user);
System.out.println("Internal View:");
System.out.println(internalJson);
}
}
আউটপুট:
Public View:
{
"id": 1,
"name": "John Doe"
}
Internal View:
{
"id": 1,
"name": "John Doe",
"email": "john.doe@example.com",
"password": "secret123"
}
ডেসিরিয়ালাইজেশনে @JsonView ব্যবহার
ডেসিরিয়ালাইজেশনের সময় ObjectMapper-এর readerWithView() মেথড ব্যবহার করা হয়।
উদাহরণ:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonViewDeserializationExample {
public static void main(String[] args) throws Exception {
String publicJson = "{ \"id\": 1, \"name\": \"John Doe\" }";
String internalJson = "{ \"id\": 1, \"name\": \"John Doe\", \"email\": \"john.doe@example.com\", \"password\": \"secret123\" }";
ObjectMapper objectMapper = new ObjectMapper();
// Public View ডেসিরিয়ালাইজেশন
User publicUser = objectMapper.readerWithView(Views.Public.class)
.forType(User.class)
.readValue(publicJson);
System.out.println("Public User:");
System.out.println(publicUser.getName());
// Internal View ডেসিরিয়ালাইজেশন
User internalUser = objectMapper.readerWithView(Views.Internal.class)
.forType(User.class)
.readValue(internalJson);
System.out.println("Internal User:");
System.out.println(internalUser.getEmail());
}
}
অনুশীলনের ক্ষেত্র
- ডেটা গোপনীয়তা: JSON View ব্যবহার করে সংবেদনশীল তথ্য (যেমন পাসওয়ার্ড বা ব্যক্তিগত তথ্য) শুধুমাত্র নির্দিষ্ট ক্ষেত্রে শেয়ার করা যায়।
- রোল ভিত্তিক ডেটা উপস্থাপনা: API তে বিভিন্ন ব্যবহারকারীর রোল অনুযায়ী ডেটা ফিল্টার করা যায়।
গুরুত্বপূর্ণ পয়েন্ট
বহু ভিউ ব্যবহার: একাধিক ভিউ একই ফিল্ডে প্রয়োগ করা যায়।
@JsonView({Views.Public.class, Views.Internal.class}) private String sharedField;- Default View: যদি
@JsonViewকোনো ফিল্ডে না থাকে, সেটি কোনো ভিউতে সিরিয়ালাইজ করা হবে না। - Inheritance: একটি ভিউ অন্য ভিউয়ের subclass হতে পারে। এতে parent ভিউয়ের সব ফিল্ড child ভিউতেও অন্তর্ভুক্ত হয়।
Jackson-এর JSON Views একটি ডেটা ফিল্টারিং টুল হিসেবে কাজ করে, যা JSON ডেটার নির্দিষ্ট অংশকে আলাদা ভিউতে উপস্থাপন করতে সহায়ক। এটি API গোপনীয়তা বজায় রাখা এবং রোল ভিত্তিক অ্যাক্সেস নিয়ন্ত্রণের জন্য অত্যন্ত কার্যকর।
Jackson-এ JSON Views একটি পদ্ধতি, যা একই Java ক্লাস থেকে বিভিন্ন প্রসঙ্গ বা ব্যবহারকারী গোষ্ঠীর জন্য JSON ডেটার ভিন্ন ভিন্ন অংশ প্রকাশ করতে ব্যবহৃত হয়। এটি প্রধানত একটি ক্লাসের নির্দিষ্ট ফিল্ডগুলিকে বিভিন্ন ভিউ (context) অনুযায়ী ফিল্টার বা কাস্টমাইজ করতে সাহায্য করে।
কেন JSON Views ব্যবহার করা হয়?
- ডেটা প্রাইভেসি নিশ্চিতকরণ: সংবেদনশীল ডেটা (যেমন পাসওয়ার্ড বা ব্যক্তিগত তথ্য) নির্দিষ্ট ভিউ থেকে লুকানো যায়।
- ডেটা কাস্টমাইজেশন: API ব্যবহারকারীর ধরন অনুযায়ী (যেমন অ্যাডমিন, ইউজার, বা গেস্ট) JSON ডেটার ভিন্ন অংশ প্রদর্শন করা যায়।
- একই ক্লাস ব্যবহার: একটি ক্লাস পুনরায় তৈরি না করেই বিভিন্ন ধরনের JSON আউটপুট তৈরি করা যায়।
- কমপ্লেক্সিটি হ্রাস: JSON সিরিয়ালাইজেশন প্রক্রিয়া সহজ এবং কার্যকর করতে।
JSON Views কিভাবে কাজ করে?
- ভিউ ডিফাইন করা:
JSON Views নির্ধারণের জন্য একটি স্ট্যাটিক নেস্টেড ইন্টারফেস ব্যবহার করা হয়। - ফিল্ড ট্যাগিং:
@JsonViewঅ্যানোটেশন ব্যবহার করে ফিল্ডগুলোকে নির্দিষ্ট ভিউ-এর জন্য ট্যাগ করা হয়। - ObjectMapper-এর মাধ্যমে সিরিয়ালাইজেশন:
নির্দিষ্ট ভিউ অনুযায়ী JSON তৈরি করতেObjectMapper-এ ভিউ সেট করা হয়।
উদাহরণ:
১. JSON Views ডিফাইন এবং ব্যবহার:
import com.fasterxml.jackson.annotation.JsonView;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonViewExample {
// ভিউ ডিফাইন করা
public static class Views {
public static class Public {}
public static class Internal extends Public {}
}
// ক্লাসের ফিল্ডে @JsonView প্রয়োগ
public static class User {
@JsonView(Views.Public.class)
private String name;
@JsonView(Views.Public.class)
private String email;
@JsonView(Views.Internal.class)
private String password;
// Constructor, Getters এবং Setters
public User(String name, String email, String password) {
this.name = name;
this.email = email;
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
public static void main(String[] args) throws Exception {
User user = new User("John Doe", "john.doe@example.com", "secret");
ObjectMapper objectMapper = new ObjectMapper();
// Public ভিউ সিরিয়ালাইজ
String publicJson = objectMapper
.writerWithView(Views.Public.class)
.writeValueAsString(user);
System.out.println("Public View JSON: " + publicJson);
// Internal ভিউ সিরিয়ালাইজ
String internalJson = objectMapper
.writerWithView(Views.Internal.class)
.writeValueAsString(user);
System.out.println("Internal View JSON: " + internalJson);
}
}
আউটপুট:
Public View JSON: {"name":"John Doe","email":"john.doe@example.com"}
Internal View JSON: {"name":"John Doe","email":"john.doe@example.com","password":"secret"}
২. ভিউ-এর ব্যবহারিক প্রয়োগ:
- Public API: যেখানে শুধুমাত্র পাবলিক তথ্য প্রকাশ করা হবে।
- Internal API: যেখানে সংবেদনশীল তথ্যসহ সম্পূর্ণ ডেটা প্রয়োজন।
JSON Views-এর গুরুত্বপূর্ণ বৈশিষ্ট্য:
মাল্টিপল ভিউ: একটি ফিল্ডকে একাধিক ভিউ-এর অংশ বানানো যায়।
@JsonView({Views.Public.class, Views.Internal.class}) private String commonField;- নেস্টেড ভিউ: এক ভিউ-এর মধ্যে আরেক ভিউ ব্যবহার করে আরও ডিটেইল প্রকাশ করা সম্ভব।
- ডায়নামিক আউটপুট: ভিন্ন ভিউ ব্যবহার করে একই ক্লাসের বিভিন্ন JSON ফরম্যাট তৈরি করা যায়।
JSON Views বনাম অন্যান্য পদ্ধতি:
| পদ্ধতি | সুবিধা | অসুবিধা |
|---|---|---|
| JSON Views | একই ক্লাস থেকে ভিন্ন ভিউ তৈরি করা সহজ। প্রাইভেসি নিশ্চিত করা যায়। | অতিরিক্ত কনফিগারেশন প্রয়োজন। |
| Custom Serializer | সম্পূর্ণ নিয়ন্ত্রণ পাওয়া যায়। | কাস্টম কোডিং বেশি করতে হয়। |
| DTO Classes | ভিন্ন ভিউ-এর জন্য আলাদা ক্লাস তৈরি করা যায়। | বেশি কোড ডুপ্লিকেশন এবং রক্ষণাবেক্ষণের সমস্যা। |
Jackson-এর JSON Views একটি কার্যকর পদ্ধতি যা ডেটা প্রাইভেসি নিশ্চিত করে এবং একই Java ক্লাস থেকে বিভিন্ন ধরনের JSON আউটপুট তৈরি করতে সাহায্য করে। এটি API ডেভেলপমেন্টে ডেটা কাস্টমাইজেশন ও নিরাপত্তার জন্য বিশেষভাবে উপযোগী।
Jackson এর @JsonView অ্যানোটেশনটি JSON Serialization এবং Deserialization কাস্টমাইজ করার একটি পদ্ধতি। এটি বিভিন্ন কন্টেক্সটে JSON ডেটার বিভিন্ন অংশ প্রকাশ বা লুকানোর জন্য ব্যবহার করা হয়। উদাহরণস্বরূপ, একই মডেল ক্লাস থেকে বিভিন্ন ভিউতে ডেটা প্রকাশ করতে @JsonView অত্যন্ত কার্যকর।
@JsonView এর প্রধান উদ্দেশ্য
- ভিন্ন ভিউ মডেল: একই ক্লাস থেকে বিভিন্ন JSON আউটপুট তৈরি করা।
- ফিল্ড লেভেল কাস্টমাইজেশন: কোন কোন ফিল্ড JSON এ থাকবে তা নির্ধারণ করা।
- Serialization এবং Deserialization: নির্দিষ্ট ভিউ অনুযায়ী ডেটা রিড এবং রাইট করা।
@JsonView এর ব্যবহার ধাপসমূহ
১. ভিউ ইন্টারফেস তৈরি করা
প্রথমে একটি বা একাধিক ভিউ ইন্টারফেস তৈরি করতে হয়, যা নির্ধারণ করবে কোন ফিল্ড কোন ভিউতে যাবে।
public class Views {
public static class Public {}
public static class Internal extends Public {}
}
২. মডেল ক্লাসে @JsonView অ্যাপ্লাই করা
import com.fasterxml.jackson.annotation.JsonView;
public class User {
@JsonView(Views.Public.class)
private String name;
@JsonView(Views.Public.class)
private int age;
@JsonView(Views.Internal.class)
private String email;
// Getters and Setters
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
Views.Public: এই ভিউতে শুধুnameএবংageথাকবে।Views.Internal: এই ভিউতেname,age, এবংemailথাকবে।
৩. ObjectMapper দিয়ে ভিউ ব্যবহার করে Serialization
উদাহরণ ১: Public ভিউ Serialization
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonViewExample {
public static void main(String[] args) throws Exception {
User user = new User();
user.setName("Alice");
user.setAge(25);
user.setEmail("alice@example.com");
ObjectMapper mapper = new ObjectMapper();
// Public ভিউ Serialization
String publicJson = mapper.writerWithView(Views.Public.class).writeValueAsString(user);
System.out.println("Public View: " + publicJson);
}
}
Output:
{"name":"Alice","age":25}
উদাহরণ ২: Internal ভিউ Serialization
// Internal ভিউ Serialization
String internalJson = mapper.writerWithView(Views.Internal.class).writeValueAsString(user);
System.out.println("Internal View: " + internalJson);
Output:
{"name":"Alice","age":25,"email":"alice@example.com"}
৪. Deserialization এ @JsonView ব্যবহার
Deserialization এর সময়ও নির্দিষ্ট ভিউ অনুযায়ী ডেটা পড়া সম্ভব।
String json = "{ \"name\": \"Bob\", \"age\": 30, \"email\": \"bob@example.com\" }";
// Deserialization (Public ভিউ)
User publicUser = mapper.readerWithView(Views.Public.class).forType(User.class).readValue(json);
System.out.println(publicUser.getName()); // Output: Bob
System.out.println(publicUser.getEmail()); // Output: null (লুকানো আছে)
৫. বাস্তব উদাহরণ: REST API তে @JsonView
REST API তে বিভিন্ন রোল ভিত্তিক ডেটা প্রকাশ করতে @JsonView ব্যবহার করা যায়।
Controller উদাহরণ (Spring Framework):
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@GetMapping("/public")
@JsonView(Views.Public.class)
public User getPublicUser() {
User user = new User();
user.setName("Alice");
user.setAge(25);
user.setEmail("alice@example.com");
return user;
}
@GetMapping("/internal")
@JsonView(Views.Internal.class)
public User getInternalUser() {
User user = new User();
user.setName("Alice");
user.setAge(25);
user.setEmail("alice@example.com");
return user;
}
}
API Output:
GET /public{"name":"Alice","age":25}GET /internal{"name":"Alice","age":25,"email":"alice@example.com"}
@JsonViewব্যবহার করে ডেটার বিভিন্ন ভিউ তৈরি করা যায়, যা API ডেভেলপমেন্টে খুব কার্যকর।- এটি একাধিক ভিউ ইন্টারফেসের মাধ্যমে JSON ফিল্ড নিয়ন্ত্রণ করতে সাহায্য করে।
- Spring Framework এর সাথে একত্রে ব্যবহার করে REST API তে বিভিন্ন স্তরের ডেটা নিরাপত্তা এবং কাস্টমাইজেশন সম্ভব।
Jackson-এর @JsonView এনোটেশন ব্যবহার করে বিভিন্ন ভিউ (Views) এর মাধ্যমে ডেটা ফিল্টার করা সম্ভব। এই পদ্ধতি বিশেষত API-এর মাধ্যমে বিভিন্ন প্রকার ইউজারদের জন্য বিভিন্ন ধরনের তথ্য প্রদর্শনের ক্ষেত্রে কার্যকর।
@JsonView কী এবং এটি কেন ব্যবহার করা হয়?
@JsonView Jackson-এর একটি এনোটেশন যা ক্লাস বা ফিল্ড লেভেলে ব্যবহৃত হয় এবং এটি নির্ধারণ করে কোন ভিউ-তে কোন ডেটা প্রদর্শিত হবে।
ব্যবহারিক প্রয়োগ:
- একাধিক ইউজার টাইপের জন্য ভিন্ন ডেটা প্রদর্শন।
- সংবেদনশীল তথ্য লুকানো।
- API-এর প্রয়োজন অনুযায়ী ডেটা ফিল্টার করা।
কীভাবে @JsonView কাজ করে?
ধাপ ১: ভিউ ক্লাস তৈরি করুন
প্রথমে একটি বা একাধিক ভিউ ক্লাস তৈরি করুন যা বিভিন্ন ভিউ রিপ্রেজেন্ট করবে।
ধাপ ২: মডেল ক্লাসে @JsonView ব্যবহার করুন
মডেল ক্লাসে ফিল্ডগুলোর উপরে @JsonView যোগ করুন এবং নির্দিষ্ট ভিউতে সেই ফিল্ডগুলো প্রদর্শন করুন।
ধাপ ৩: ObjectMapper-এ ভিউ সেট করুন
ObjectMapper-এ নির্দিষ্ট ভিউ দিয়ে JSON serialization সম্পন্ন করুন।
উদাহরণ: Different Views দিয়ে Data Filtering
উদাহরণ JSON Data:
{
"id": 101,
"name": "John Doe",
"email": "john.doe@example.com",
"salary": 50000,
"department": "Engineering"
}
কোড:
import com.fasterxml.jackson.annotation.JsonView;
import com.fasterxml.jackson.databind.ObjectMapper;
class Views {
// Public View
public static class Public {}
// Internal View (extends Public)
public static class Internal extends Public {}
}
class Employee {
@JsonView(Views.Public.class)
public int id;
@JsonView(Views.Public.class)
public String name;
@JsonView(Views.Internal.class)
public String email;
@JsonView(Views.Internal.class)
public double salary;
@JsonView(Views.Public.class)
public String department;
}
public class Main {
public static void main(String[] args) throws Exception {
Employee employee = new Employee();
employee.id = 101;
employee.name = "John Doe";
employee.email = "john.doe@example.com";
employee.salary = 50000;
employee.department = "Engineering";
ObjectMapper objectMapper = new ObjectMapper();
// Public View serialization
String publicViewJson = objectMapper.writerWithView(Views.Public.class).writeValueAsString(employee);
System.out.println("Public View: " + publicViewJson);
// Internal View serialization
String internalViewJson = objectMapper.writerWithView(Views.Internal.class).writeValueAsString(employee);
System.out.println("Internal View: " + internalViewJson);
}
}
আউটপুট:
Public View:
{
"id": 101,
"name": "John Doe",
"department": "Engineering"
}
Internal View:
{
"id": 101,
"name": "John Doe",
"email": "john.doe@example.com",
"salary": 50000,
"department": "Engineering"
}
মূল ব্যবহারিক ক্ষেত্র:
- API Security:
- Public API তে সংবেদনশীল তথ্য (যেমন
email,salary) লুকানো। - Internal API-তে সম্পূর্ণ ডেটা দেখানো।
- Public API তে সংবেদনশীল তথ্য (যেমন
- ভিন্ন ভিউ ব্যবহার:
- Frontend এবং Backend-এর জন্য আলাদা ডেটা প্রদর্শন।
- ভিন্ন ভিউ-তে ডেটা ফিল্টার করে লোড কমানো।
- ডায়নামিক ডেটা প্রদর্শন:
- একাধিক ইউজার টাইপের জন্য একক API-তে ভিন্ন ভিউ-এর ব্যবহার।
উপকারিতা:
- Reusable View Classes: একবার ভিউ ক্লাস তৈরি করলে তা পুনরায় ব্যবহার করা যায়।
- Readable Code: সহজে বোঝা যায় কোন ফিল্ড কোন ভিউতে যাবে।
- Efficient Filtering: বড় JSON থেকে নির্দিষ্ট ডেটা ফিল্টার করার কার্যকর পদ্ধতি।
এই পদ্ধতিটি API ডেভেলপমেন্ট এবং ডেটা ফিল্টারিংয়ে অত্যন্ত কার্যকর এবং সহজেই পরিচালনাযোগ্য।
Jackson JSON Views একটি কার্যকর ফিচার যা জটিল ডেটা স্ট্রাকচারে JSON Serialization এবং Deserialization-এ data filtering করতে সাহায্য করে। এটি মূলত একাধিক কনটেক্সটে একই ডেটা স্ট্রাকচার ব্যবহার করার সময় ভিন্ন ভিন্ন ফিল্ড দেখানোর জন্য ব্যবহৃত হয়।
JSON Views কী?
JSON Views-এর মাধ্যমে আমরা নির্ধারণ করতে পারি কোন কোন ফিল্ড JSON আউটপুটে অন্তর্ভুক্ত হবে। এটি সাধারণত API-তে ডেটার সংবেদনশীলতা বা ভিন্ন ভিন্ন ইউজার টাইপের জন্য ডেটা দেখানোর কাস্টমাইজেশনে ব্যবহৃত হয়।
JSON Views কনফিগার করার ধাপসমূহ
1. View Class ডিফাইন করুন
প্রথমে ভিন্ন ভিন্ন ভিউয়ের জন্য marker interfaces তৈরি করতে হবে।
public class Views {
public static class Public {} // সাধারণ ইউজারদের জন্য ভিউ
public static class Internal extends Public {} // অ্যাডমিন বা অভ্যন্তরীণ ইউজারদের জন্য ভিউ
}
2. Model Class-এ ফিল্ডে ভিউ নির্ধারণ করুন
@JsonView এনোটেশন ব্যবহার করে ফিল্ডগুলোতে নির্ধারণ করুন কোন ভিউতে ফিল্ডটি অন্তর্ভুক্ত হবে।
import com.fasterxml.jackson.annotation.JsonView;
public class Product {
@JsonView(Views.Public.class)
private int id;
@JsonView(Views.Public.class)
private String name;
@JsonView(Views.Internal.class)
private double costPrice;
@JsonView(Views.Public.class)
private double sellingPrice;
// Getters and Setters
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public double getCostPrice() { return costPrice; }
public void setCostPrice(double costPrice) { this.costPrice = costPrice; }
public double getSellingPrice() { return sellingPrice; }
public void setSellingPrice(double sellingPrice) { this.sellingPrice = sellingPrice; }
}
3. JSON Serialization-এ ভিউ প্রয়োগ করুন
ObjectMapper-এর মাধ্যমে JSON Serialization করার সময় নির্দিষ্ট ভিউ ব্যবহার করুন।
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
public class JSONViewsExample {
public static void main(String[] args) throws Exception {
// Sample Data
Product product = new Product();
product.setId(1);
product.setName("Laptop");
product.setCostPrice(500.00);
product.setSellingPrice(750.00);
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
// Public View Serialization
String publicViewJson = mapper
.writerWithView(Views.Public.class)
.writeValueAsString(product);
System.out.println("Public View:");
System.out.println(publicViewJson);
// Internal View Serialization
String internalViewJson = mapper
.writerWithView(Views.Internal.class)
.writeValueAsString(product);
System.out.println("\nInternal View:");
System.out.println(internalViewJson);
}
}
আউটপুট:
Public View:
{
"id" : 1,
"name" : "Laptop",
"sellingPrice" : 750.0
}
Internal View:
{
"id" : 1,
"name" : "Laptop",
"costPrice" : 500.0,
"sellingPrice" : 750.0
}
Complex Data Structure-এ JSON Views-এর প্রয়োগ
উদাহরণ: Nested Object বা Complex Structure
import com.fasterxml.jackson.annotation.JsonView;
public class Order {
@JsonView(Views.Public.class)
private int orderId;
@JsonView(Views.Public.class)
private String customerName;
@JsonView(Views.Internal.class)
private Product product;
// Getters and Setters
public int getOrderId() { return orderId; }
public void setOrderId(int orderId) { this.orderId = orderId; }
public String getCustomerName() { return customerName; }
public void setCustomerName(String customerName) { this.customerName = customerName; }
public Product getProduct() { return product; }
public void setProduct(Product product) { this.product = product; }
}
Complex Structure Serialization:
public class ComplexStructureExample {
public static void main(String[] args) throws Exception {
// Product Object
Product product = new Product();
product.setId(101);
product.setName("Smartphone");
product.setCostPrice(400.00);
product.setSellingPrice(600.00);
// Order Object
Order order = new Order();
order.setOrderId(1);
order.setCustomerName("Alice");
order.setProduct(product);
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
// Public View Serialization
String publicViewJson = mapper
.writerWithView(Views.Public.class)
.writeValueAsString(order);
System.out.println("Public View:");
System.out.println(publicViewJson);
// Internal View Serialization
String internalViewJson = mapper
.writerWithView(Views.Internal.class)
.writeValueAsString(order);
System.out.println("\nInternal View:");
System.out.println(internalViewJson);
}
}
আউটপুট:
Public View:
{
"orderId" : 1,
"customerName" : "Alice",
"product" : {
"id" : 101,
"name" : "Smartphone",
"sellingPrice" : 600.0
}
}
Internal View:
{
"orderId" : 1,
"customerName" : "Alice",
"product" : {
"id" : 101,
"name" : "Smartphone",
"costPrice" : 400.0,
"sellingPrice" : 600.0
}
}
JSON Views এর ব্যবহার ক্ষেত্র
- Role-Based Data Filtering:
- Public vs Admin API ভিউতে আলাদা ডেটা ফিল্টার করা।
- Dynamic API Responses:
- ভিন্ন প্রকারের ইউজার বা ক্লায়েন্টের জন্য ভিন্ন JSON স্ট্রাকচার প্রদান।
- Security and Privacy:
- সংবেদনশীল ডেটা লুকানোর জন্য।
Jackson-এর JSON Views একটি শক্তিশালী টুল যা জটিল ডেটা স্ট্রাকচার-এ ফিল্ড লেভেলে কাস্টমাইজড JSON Serialization-এর জন্য আদর্শ। এটি API-এর ডেটা প্রক্রিয়াকরণে নমনীয়তা এবং নিরাপত্তা নিশ্চিত করে।
Read more